﻿
// UsartDlg.h: 头文件
//
#pragma once

// CUsartDlg 对话框
class CUsartDlg : public CDialogEx
{
	// 构造
public:
	CUsartDlg(CWnd* pParent = nullptr);	// 标准构造函数
	CWinThread* pReceiveThread;
	CWinThread* pStaticTxtThread;
// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_USART_DIALOG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持 就理解为这个函数是将变量和控件绑定到一起


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	virtual void OnOK(); // 重写OnOk事件，否则按回车时 窗口会退出

public:
	CComboBox m_bstop;
	CComboBox m_bdata;
	CComboBox m_cal;
	CComboBox m_comlist;
private:
	CComboBox m_baud;
	CButton m_comcontrol;
	CButton m_clrrx;
	CButton m_handsend;
	CButton m_clrtx;
	CButton m_autosend;
	CEdit m_timer;
	CButton m_selctfile;
	CButton m_sendfile;
	CEdit m_status;
	CEdit m_filepath;
private:
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
	
public:
	afx_msg void OnBnClickedComcontrol(); // 主窗按键消息 -- 打开串口
	afx_msg void OnBnClickedClosecommlist(); // 主窗按键消息 -- 关闭串口
	afx_msg void OnBnClickedBtnClrrx(); // 主窗按键消息 -- 清空接收区
	afx_msg void OnBnClickedBtnClrtx(); // 主窗按键消息 -- 清空发送区
	afx_msg void OnBnClickedBtnHandsend(); // 主窗按键消息 -- 手动发送按钮
	afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI); //设置窗口可以拉动的最小大小
	afx_msg void OnClickedBtnextend();
	
	// 几个复选框的点击勾选消息，我们值判断复选框当前状态，未用，
	afx_msg void OnBnClickedCheck1(); // 主窗按键消息 -- 清空接收区
	afx_msg void OnBnClickedCheck2();
	afx_msg void OnBnClickedCheck3(); 

	afx_msg void OnStnClickedStaticIcon(); // icon 图标点击消息，未用
	afx_msg void OnEnChangeEditRx(); // 编辑框修改消息，未用

	void CString2Char(CString str, char ch[]); //字符格式转换函数 便于发送
	void OnCheckHexrx(); // 接收窗显示函数
	DWORD ReadComm(); // 读串口数据，再调用 OnCheckHexrx 函数显示出来
	CButton m_closecommlist;
	//扩展窗口用
	CRect m_rect_raw; // 黑色区域 + 红色区域(原始)
	CRect m_rect; //黑色区域 + 红色区域
	CRect m_rtFace; // 黑色区域
	int Ext_Width; // 扩展窗宽度
	CEdit m_tx;
	CEdit m_rx;

//	BOOL m_re;
// bool 值 指示复选框是否被勾选 -- 日志模式
	CButton m_re; //日志模式的复选框，bool太坑了

	CStatic m_message;
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	// 16进制接收
//	BOOL m_hex_rx;

	CButton m_hex_rx;
	CButton m_hex_tx;
};


